import { Config, Provide , ALL} from '@midwayjs/core';
import { IUserOptions } from '../../../interface';
import { UserInfoEntity } from '../entity/info'
import { InjectEntityModel } from '@midwayjs/typeorm';
import { Repository } from 'typeorm';
import type { InfoDto } from '../dto/info'
/**
 * Repository 类在 TypeORM 中用于操作数据库实体，提供了一系列方
 * 法来进行数据库的增删改查等操作。
 *    findOne 查询数据
 *    create  创建实体
 *    save    保存实体
 *    delete  删除实体
 *      
*/
@Provide()
export class UserService {
  /*
    @InjectEntityModel 注入UserInfoEntity 实体的Repository,用于操作数据库
  */
  @InjectEntityModel(UserInfoEntity)
  userInfoRepository: Repository<UserInfoEntity>;

  @Config(ALL)
  allConfig


  async getUser(options: IUserOptions) {
    const user = await this.userInfoRepository.findOne({
      where:{
        id:options.id
      },
      select:['id','name','age','sex','email','phone','address']
    })
    return user
  }

  // 创建用户
  // 添加验证
  async createUser(user:InfoDto){
    console.log(`output->allConfig`,this.allConfig)
    // 1. 先通过create方法将 user 数据创建为实体
    // 2. 将实体保存到数据库
    const newEntity = this.userInfoRepository.create(user)
    await this.userInfoRepository.save(newEntity)
  }

  async updateUser(user:UserInfoEntity){
    await this.userInfoRepository.update(user.id,{
      name:user.name,
      age:user.age,
      sex:user.sex,
      email:user.email,
      phone:user.phone,
      address:user.address
    })
  }
}
